/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package iluscodelogica;

import java.util.HashMap;



/**
 * 
 * Clase que contiene las palabras claves del lenguaje
 * 
 * @author IlusCode Software para aprender a programar
 */
public class PalabraClave {

    TipoToken tokenTipo;
    String token;
    
    static HashMap hashPalabras;

    /**
     * 
     * @param tokenTipo
     * @param token
     */
    public PalabraClave(TipoToken tokenTipo, String token) {

        this.tokenTipo = tokenTipo;
        this.token = token.toLowerCase().intern();
        this.hashPalabras.put(token, this);
    }

    /**
     * 
     * @return
     */
    public String getToken() {

        return token;
    }

    /**
     * 
     * @return
     */
    public TipoToken getTipoToken() {

        return tokenTipo;
    }

    static {
        hashPalabras = new HashMap();
        new PalabraClave(TipoToken.PROGRAMA, "programa");
        new PalabraClave(TipoToken.FINALPROGRAMA, "finalprograma");   
        
        new PalabraClave(TipoToken.INICIOEJECUCION, "inicioejecucion");
        new PalabraClave(TipoToken.FINPROGRAMA, "finprograma");
        
        new PalabraClave(TipoToken.PROCEDIMIENTO, "procedimiento");
        new PalabraClave(TipoToken.FINPROCEDIMIENTO, "finprocedimiento");
        
        new PalabraClave(TipoToken.INICIO, "inicio");
        new PalabraClave(TipoToken.FIN, "fin");    

        new PalabraClave(TipoToken.SI, "si");
        new PalabraClave(TipoToken.ENTONCES, "entonces");
        new PalabraClave(TipoToken.SI_NO, "sino");
        new PalabraClave(TipoToken.FIN_SI, "finsi");

        new PalabraClave(TipoToken.MIENTRAS, "mientras");
        new PalabraClave(TipoToken.HACER, "hacer");
        new PalabraClave(TipoToken.FIN_MIENTRAS, "finmientras");
        
        new PalabraClave(TipoToken.REPETIR, "repetir");
        new PalabraClave(TipoToken.VECES, "veces");

        new PalabraClave(TipoToken.PARA, "para");
        new PalabraClave(TipoToken.FIN_PARA, "finpara");
        new PalabraClave(TipoToken.DESDE, "desde");
        new PalabraClave(TipoToken.HASTA, "hasta");        

        new PalabraClave(TipoToken.LIT_CIERTO, "cierto");
        new PalabraClave(TipoToken.LIT_FALSO, "falso");
        new PalabraClave(TipoToken.OP_NOT, "no");
        new PalabraClave(TipoToken.OP_O, "o");
        new PalabraClave(TipoToken.OP_Y, "y");
        new PalabraClave(TipoToken.TIPO_CADENA, "cadena");
        new PalabraClave(TipoToken.TIPO_ENTERO, "entero");
        new PalabraClave(TipoToken.TIPO_LOGICO, "logico");
        new PalabraClave(TipoToken.NOMBRE, "nombre");
        new PalabraClave(TipoToken.CHAR, "char");


    }

    /**
     * 
     * @param s
     * @return
     */
    public static PalabraClave buscarPalabra(String s) {

        return (PalabraClave) hashPalabras.get(s.intern());
    }
}
